#include <iostream>

class Test
{
public:
    Test()
    {
        std::cout << "无参构造函数！" << std::endl;
        a = new int;
    }
    /*深拷贝*/
    Test(Test &t)
    {
        std::cout << "拷贝构造函数！" << std::endl;
        a = new int;
        *a = *t.a;
    }
    ~Test()
    {
        std::cout << "析构函数！" << std::endl;
        delete a;
    }
    void operator=(Test &t)
    {
        std::cout << "赋值运算符的重载！" << std::endl;
        delete a;
        a = new int;
        *a = *t.a;
    }

private:
    int *a;
};

/*RVO优化 ：返回值优化*/
/*返回局部对象不会发生拷贝，而是直接夺取内存*/
/*左值不会被优化*/
// Test func()
// {
//     Test t;
//     return t; // 将亡值
// }

Test func(Test t)
{

    return t; // 将亡值
}


int main()
{
    // Test t;
    // // Test t1(t);
    // Test t1;
    // t1 = t;

    // Test();     //匿名对象 ：生命周期只有一行   将亡值   是一个右值

    // Test t;
    // Test t1 = Test();

    // Test t1 = func();

    Test t;
    Test t1 = func(t);

    return 0;
}